#ifndef TITLEWIDGET_H
#define TITLEWIDGET_H

#include <QWidget>
#include <QTimer>
#include <QLabel>
#include <QPushButton>

#define BUTTON_HEIGHT 30        // 按钮高度;
#define BUTTON_WIDTH 30         // 按钮宽度;
#define TITLE_HEIGHT 30         // 标题栏高度;

enum ButtonType
{
    MIN_BUTTON = 1,             // 001 最小化和关闭按钮;
    MIN_MAX_BUTTON = 2 ,        // 010 最小化、最大化和关闭按钮;
    ONLY_CLOSE_BUTTON  = 4 ,    // 100 只有关闭按钮;
    OTHER_BUTTON = 8            // 可添加其他按钮
};


class TitleWidget : public QWidget
{
    Q_OBJECT
public:
    explicit TitleWidget(QWidget *parent);   //父对象不能为空
    // 设置标题栏背景色及是否设置标题栏背景色透明;
    void setBackgroundColor(QColor color, bool isTransparent = false);
    // 设置标题栏图标;
    void setTitleIcon(QString filePath , QSize IconSize = QSize(25 , 25));
    // 设置标题内容;
    void setTitleContent(QString titleContent , int titleFontSize = 9);
    // 设置标题栏长度;
    void setTitleWidth(int width);
    // 设置标题栏上按钮类型;
    void setButtonType(ButtonType buttonType);
    // 设置窗口边框宽度;
    void setWindowBorderWidth(int borderWidth);
    // 设置窗口边框颜色;
    void setWindowBorderColor(QColor color);
    // 保存/获取 最大化前窗口的位置及大小;
    void saveRestoreInfo(const QPoint point, const QSize size);
    void getRestoreInfo(QPoint& point, QSize& size);

signals:    // 按钮触发的信号
    void signalButtonMinClicked();
    void signalButtonRestoreClicked();
    void signalButtonMaxClicked();
    void signalButtonCloseClicked();

private slots:  // 按钮触发的槽
    void onButtonMinClicked();
    void onButtonRestoreClicked();
    void onButtonMaxClicked();
    void onButtonCloseClicked();

private:
    void paintEvent(QPaintEvent *event);
    void mouseDoubleClickEvent(QMouseEvent *event);
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);

    // 初始化控件;
    void initUI();
    // 信号槽的绑定;
    void initConnections();
    // 加载样式文件;
    void loadStyleSheet(const QString &sheetName);
private:
    QLabel* m_pIcon;                    // 标题栏图标;
    QLabel* m_pTitleContent;            // 标题栏内容;
    QPushButton* m_pButtonMin;          // 最小化按钮;
    QPushButton* m_pButtonRestore;      // 最大化还原按钮;
    QPushButton* m_pButtonMax;          // 最大化按钮;
    QPushButton* m_pButtonClose;        // 关闭按钮;

    QColor m_backColor,m_borderColor;     // 标题栏背景、边框色
    QString m_titleContent;             // 标题栏内容
    ButtonType m_buttonType;            // 按钮类型
    int m_windowBorderWidth;            // 窗口边框宽度
    bool m_isTransparent;               // 标题栏是否透明

    // 最大化，最小化变量;
    QPoint m_restorePos;    //位置
    QSize m_restoreSize;    //大小

    // 移动窗口的变量;
    bool m_isPressed;
    QPoint m_startMovePos;
};

#endif // TITLEWIDGET_H
